package com.hzw.saas.common.pay.unionpay.bean;

import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.hzw.saas.common.pay.unionpay.config.UnionPayConfig;
import lombok.Getter;

/**
 * 银联退款请求参数
 *
 * @author zzl
 * @since 2020-10-02
 */
@Getter
public class UnionRefundReqContent extends UnionQueryReqContent {

    /**
     * 渠道类型，
     * 区分B2C网关支付和手机wap支付；07：PC,平板  08：手机
     */
    private String channelType;

    /**
     * 交易币种（境内商户一般是156 人民币）
     */
    private String currencyCode;

    /**
     * 交易金额，单位分，不要带小数点
     */
    private String txnAmt;

    /**
     * 原消费交易返回的的queryId
     */
    private String origQryId;

    /**
     * 后台通知地址（需设置为外网能访问 http https均可），支付成功后银联会自动将异步通知报文post到商户上送的该地址，失败的交易银联不会发送后台通知
     * 注：
     * 收单后台通知后需要10秒内返回http200或302状态码
     * 如果银联通知服务器发送通知后10秒内未收到返回状态码或者应答码非http200，那么银联会间隔一段时间再次发送。总共发送5次，每次的间隔时间为0,1,2,4分钟。
     */
    private String backUrl;

    public void setTxnAmt(String txnAmt) {
        this.txnAmt = txnAmt;
    }

    public void setOrigQryId(String origQryId) {
        this.origQryId = origQryId;
    }

    protected void checkParams() {
        super.checkParams();
        this.backUrl = UnionPayConfig.config().getBackUrl();
        this.channelType = "07";
        this.currencyCode = "156";
    }

    public Map<String, String> buildContent() {
        this.checkParams();

        String json = JSON.toJSONString(this);
        return JSON.parseObject(json, new TypeReference<HashMap<String, String>>() {});
    }

}
